package com.dc.kylin.integration.chche;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.UUID;
import java.util.concurrent.TimeUnit;

@Component
public class TokenCache {

    //token前缀
    public static final String TOKEN_CACHE_PREFIX = "token_cache:";
    //token过期时间60s
    public static final long TOKEN_CHCHE_EXPIRE_TIME = 60;
    // 提前 5 分钟刷新 Token可以配置化
    public static final long REFRESH_TOKEN_EXPIRE_TIME = 60 * 5;


    @Autowired
    private RedisTemplate<String, Object> redisTemplate;


    /****
     * 生成token
     * @return
     */
    public String generateToken() {
        return UUID.randomUUID().toString();
    }

    /****
     * 存储token
     * @param token
     * @param nodeIdentifier
     */
    public void putToken(String token, String nodeIdentifier) {
        redisTemplate.opsForValue().set(TOKEN_CACHE_PREFIX+token, nodeIdentifier,TOKEN_CHCHE_EXPIRE_TIME, TimeUnit.SECONDS);
    }


    /****
     * 验证token
     * @param token
     * @return 验证结果（true 表示有效，false 表示无效）
     */

    public boolean checkToken(String token) {
        Object nodeIdentifier = redisTemplate.opsForValue().get(TOKEN_CACHE_PREFIX+token);
        return nodeIdentifier !=null;
    }

    /****
     * 刷新token
     * @param token
     */
    public void reflushToken(String token) {
        redisTemplate.expire(TOKEN_CACHE_PREFIX+token, TOKEN_CHCHE_EXPIRE_TIME, TimeUnit.SECONDS);
    }

}
